<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    <script>

        // es3.0 es5.0 es6.0 现在学的主要是 es3 和 es5
        //ECMAScript
        // 数组的位数如果是负数，系统会让它加 length 处理
 
        /*改变原数组*/
// 1. push
        // 在数组末尾添加数据
        var arr = [];
        arr.push(10); // 返回添加完后的数组长度
        arr.push(9);
        arr.push(8);
        arr.push(1,2,3,4,5);// 可以同时添加多个数据

        //仿写
        Array.prototype.myPush = function() {
            for(var i = 0; i < arguments.length; i ++){
                this[this.length] = arguments[i];
            }
            return this.length;
        }
        arr.myPush(1,2);
       // console.log(arr);

// 2.pop
        //把数组最后一位剪切并返回，不接受传参
        arr = [4, 5, 4];
        arr.pop();  //返回数组的最后一位

        arr.pop();

// 3. shift
        // 把数组的第一位剪切并返回
        var arr1 = [1, 2, 3];
        arr1.shift(); 


// 4. unshift
        //在数组的前面加数据
        arr = [1, 2, 3];
        arr.unshift(0); // 返回添加后的数组长度
        arr.unshift(-2, -1);//一次添加多个参数


// 5. reverse
        // 逆转原数组，并返回逆转的原数组
        arr = [1, 2, 3, 4, 5];
        var arr2 = arr.reverse();
       // console.log(arr === arr2);


// 6. splice （拼接 ）很强大的方法

        arr = [1, 1, 2, 2, 3, 3];
        // arr.splice(从第几位开始，截取多少的长度，在切口处添加新的数据)
        var arr3 = arr.splice(1,2); //从第一位开始（包括第一位），截取两位，截取的以新数组形式返回
        //  arr被改变，去掉截取的部分

        arr.splice(1,1,0,0,0,0); // 后面的0会被添加到切口处


        arr = [1,2,3,5];
        arr.splice(3,0,4); //返回空数组，把 4 填进去

// 7. sort  大哥级方法
        // 给数组排序的
        arr = [1,5,35,64,2,46];
        arr.sort(); // 按字符编码排的，可以给字符串排序
        // 返回排序后的数组，即改变的原数组

        //实现想要的结果：
        //1.必须写俩形参
        //2. 看返回值 1> 当返回值为负数时，那么前面的数放在前面
        //           2> 为正数，那么后面的数在前
        //           3> 为0 ，不动

        arr.sort(function(a, b) {
        // 函数会被反复调用，第一次先把数组的第一位和第二位传进来
        // 然后看返回值，是否交换两数的位置，为正数则交换
        // 之后传1 3位，1 4位，1 5位，2 3， 2 4， 2 5。。。。
            // return a - b; // 升序
            return b - a; // 降序
        });


        /* 随机给一个数组乱序*/
        arr.sort(function(a, b){
            return Math.random() - 0.5;
            // Math.random() 会产生0-1之间的随机数
        });

        /* 为对象的其中一个属性排序*/
        var cheng = {
            name: 'cheng',
            age: 18,
            sex: 'male',
            face: 'handsome'
        }
        var deng = {
            name: 'deng',
            age: 40,
            sex: undefined,
            face: 'amazing'
        }
        var zhang = {
            name: 'zhang',
            age: 20,
            sex: 'female',
            face: 'lalala'
        }

        var myArr = [cheng, deng, zhang];

        myArr.sort(function(a, b){
            return a.age - b.age;
        });

        /*按字符串长度排序*/ //可以推导按各种属性排序
        var arr = ['sdferf', 'usehued', 'sdjhfh', 'fhsdjfhwerwejbr', 'sd'];
        arr.sort(function(a, b){
            return a.length - b.length;
        });


        /*不改变原数组*/
// 1. concat  连接两个数组,返回一个全新的数组

        var arr = [1,2,3,4,5];
        var arr1 = [7,8,9];
        var arr2 = arr.concat(arr1); 
        console.log(arr2);

// 2. toString  重写的方法
        arr.toString() // 返回 "1,2,3,4,5"

// 3. slice  截取,切片
        // slice(从该位开始截取，截取到该位(不包括该位))
        var arr3 = arr.slice(1,4); //返回 [2, 3, 4]，不改变原数组

        arr.slice(1); // 从第一位开始，一直截取到最后
        arr.slice(-4);
        arr.slice(); // 整个截取


// 4. join
        //必须传字符串进去，按照传的字符串连
        //把数组的每一位连起来，形成字符串
        arr.join();    // 返回 "1,2,3,4,5"
        arr.join("");  // 返回 "12345"
        arr.join("-"); // 返回 "1-2-3-4-5"



// 5. split  是字符串的方法，但和数组的方法可逆

        var str = arr.join('|'); // "1|2|3|4|5"

        str.split('|'); // 返回 ["1", "2", "3", "4", "5"]
        str.split('3'); // 返回 ["1|2|", "|4|5"]
        str.split('');  // 返回 ["1", "|", "2", "|", "3", "|", "4", "|", "5"]
        str.split(' '); // 返回 ["1|2|3|4|5"]
        str.split();    // 返回 ["1|2|3|4|5"]

        var str1 = 'alibaba',
            str2 = 'baidu',
            str3 = 'tencent',
            str4 = 'wangyi';
        var arr = [str1, str2, str3, str4];
        arr.join(""); // 把所有的字符串拼接起来，数组散列结构比直接累加更适合

    </script>
</body>
</html>